//初始化mongoose的文件,mongoose跟数据库连接
const mongoose = require('mongoose')
const db = "mongodb://localhost/shop-vue"//创建一个shop-vue数据库
const glob = require('glob')//引入Node的模块，允许使用*，获取匹配对应规则文件。
const {resolve} = require("path")//引入Node的模块，用_dirname表示项目的绝对路径，基础知识。


exports.initSchemas = () =>{
     //遍历将schema文件夹下的所有的初始化数据库集合js文件都引进来，进行同步遍历，在暴露出去。
     glob.sync(resolve(__dirname,"./schema",'**/*.js')).forEach(require)//优雅引入文件
}



exports.connect = () => {
     //连接数据库
     mongoose.connect(db)
     let maxConnectTimes = 0


     return new Promise((resolve, reject) => {
          //把所有连接放到这里

          //增加数据库监听事件
          mongoose.connection.on('disconnected', () => {
               console.log('***********数据库断开***********')
               if (maxConnectTimes < 3) {
                    maxConnectTimes++
                    mongoose.connect(db)
               } else {
                    reject()
                    throw new Error('数据库出现问题，程序执行错误，请人为修理......')
               }

          })

          mongoose.connection.on('error', err => {
               console.log('***********数据库错误***********')
               if (maxConnectTimes < 3) {
                    maxConnectTimes++
                    mongoose.connect(db)
               } else {
                    reject(err)
                    throw new Error('数据库出现问题，程序无法搞定，请人为修理......')
               }

          })
          //链接打开的时
          mongoose.connection.once('open', () => {
               console.log('MongoDB connected successfully！')
               resolve()
          })

     })

}